package com.jiepos.mpos.common.dao;

import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.Map;

import org.springframework.dao.DataAccessException;
import org.springframework.jdbc.core.CallableStatementCallback;
import org.springframework.jdbc.core.CallableStatementCreator;
import org.springframework.stereotype.Repository;

import com.jiepos.mpos.common.entity.App_Custom_Account_ChangeEntity;
import com.jiepos.mpos.core.dao.BaseDao;

import oracle.jdbc.driver.OracleTypes;

/**
 * 会员账户变动明细数据操作类
 * 要求能简洁地表达出类的功能和职责
 * @ProjectName:  [mpos1] 
 * @Package com.jiepos.mpos.common.dao 
 * @author 肖志伟
 * @version 1.0
 * @since 2017年9月25日 下午4:40:49
 * @history（历次修订内容、修订人、修订时间等）
 * @UpdateRemark [说明本次修改内容]
 * @Copyright (c) 2017 江苏杰博实信息技术有限公司
 */
@Repository
public class CustomAccountChangeDao extends BaseDao<App_Custom_Account_ChangeEntity> {

	/**
	 * 新增 会员佣金分润 记录
	 * @param i_amount_type
	 * @param i_custom_login_id
	 * @param i_trace_no
	 * @return
	 */
	public Map<String,String> insertCustomAccChange(final String i_amount_type,final String i_custom_login_id,final String i_trace_no){
		
		
		Map result = (Map)jdbcTemplate.execute(new CallableStatementCreator() {
			public CallableStatement createCallableStatement(Connection con) throws SQLException {
				String storedProc = "{call package_member.p_custom_amount(?,?,?,?,?,?,?,?)}";// 调用的sql
				CallableStatement cs = con.prepareCall(storedProc);
				cs.setString(1, i_amount_type);//金额计算类型，1-推荐注册，2-充值，3-消费 
				cs.setString(2, i_custom_login_id);//客户登陆账号
				cs.setString(3, i_trace_no);//交易流水号
				cs.registerOutParameter(4, OracleTypes.VARCHAR);//客户手机号 
				cs.registerOutParameter(5, OracleTypes.VARCHAR);//直接推荐人clientid 
				cs.registerOutParameter(6, OracleTypes.NUMBER);//直接推荐佣金
				cs.registerOutParameter(7, OracleTypes.VARCHAR);//间接推荐人clientid
				cs.registerOutParameter(8, OracleTypes.NUMBER);//间接推荐佣金
				return cs;
			}
		}, new CallableStatementCallback<Object>() {
			public Object doInCallableStatement(CallableStatement cs) throws SQLException, DataAccessException {
				cs.execute();
				Map<String,String>	map = new HashMap<String,String>();
				map.put("o_custom_phone", cs.getString(4));//客户手机号
				map.put("o_direct_custom_uuid", cs.getString(5));//直接推荐人clientid
				map.put("o_direct_amount", cs.getString(6));//直接推荐佣金
				map.put("o_indirect_custom_uuid", cs.getString(7));//间接推荐人clientid
				map.put("o_indirect_amount", cs.getString(8));//间接推荐佣金
				log.debug("计算客户佣金[{}]查询对应的信息:[{},{},{}]",i_amount_type,i_custom_login_id,i_trace_no,map);
				return map;// 获取输出参数的值
			}
		});
		return result;
	}
}
